package ar.com.arkios.kfcon4d.dao;

import ar.com.arkios.kfcon4d.util.RegisterBuilder;
import ar.com.arkios.kfconmodelo.modelo.PesoStandar;
import ar.com.arkios.j4d.opDataArray;
import java.util.List;
import org.apache.log4j.Logger;

/**
 * <p>
 * 
 * </p>
 */
public class PesoStandarDAO extends GenericDAO<PesoStandar> {
    
    private static final Logger miLogger = Logger.getLogger(PesoStandarDAO.class);
    
    /** Nombre de la tabla EnvasePeso */
    private static final String ENVASES_PESO = "EnvasesPeso";
    
    // Columnas de la tabla EnvasePeso
    private static final String ENVASES_PESO_CLAVE = "PkSAP";
    private static final String ENVASES_PESO_VARIEDAD = "Variedad";
    private static final String ENVASES_PESO_ENVASE = "Envase";
    private static final String ENVASES_PESO_CALIBRE = "CalibreSAP";
    private static final String ENVASES_PESO_ZONA = "Zona";
    private static final String ENVASES_PESO_EMBALAJE = "Embalaje";
    private static final String ENVASES_PESO_PREFERIDO = "Preferido";
    private static final String ENVASES_PESO_PESO_PROMEDIO = "PesoPromedio";
    
    /** Nombres de las columnas a ser utilizadas de la tabla EnvasePeso. */
    private static final String[] ENVASES_PESO_COLUMNAS = {ENVASES_PESO_CLAVE, ENVASES_PESO_VARIEDAD, ENVASES_PESO_ENVASE, ENVASES_PESO_CALIBRE, ENVASES_PESO_ZONA, ENVASES_PESO_EMBALAJE, ENVASES_PESO_PREFERIDO, ENVASES_PESO_PESO_PROMEDIO};
    
    /** Nombres de las columnas a ser utilizada como PK de EnvasePeso. */
    private static final String[] ENVASES_PESO_PK = {ENVASES_PESO_CLAVE};
    private static final String fs = new Character('\u001C').toString();

    @Override
    protected String getEntidadKeyValue(PesoStandar elem) {
        return elem.getMiEnvaseCod() + fs + elem.getMiVariedadCod() + fs + elem.getMiEmbalajeCod() + fs + elem.getMiCalibreCod() + fs + String.format("%1$02d", elem.getMiPosicion());
    }

    @Override
    protected String getEntidadTableName() {
        return ENVASES_PESO;
    }

    @Override
    protected String getPKProperty() {
        return "miCodigo";
    }

    @Override
    protected opDataArray[] mapListEntidadTo4D(List<PesoStandar> laLista) {
        opDataArray[] losDatosEnvasePeso = new opDataArray[getMiEntidadFields().mSize];

        for (int i = 0; i < losDatosEnvasePeso.length; i++) {
            losDatosEnvasePeso[i] = new opDataArray(laLista.size());
        }

        int i = 0;
        for (PesoStandar pesoStandar : laLista) {            
            RegisterBuilder envasePesoRegisterBuilder = new RegisterBuilder(getMiEntidadFields());
            envasePesoRegisterBuilder.setData(ENVASES_PESO_CLAVE,getEntidadKeyValue(pesoStandar));
            envasePesoRegisterBuilder.setData(ENVASES_PESO_VARIEDAD, pesoStandar.getMiVariedadCod());
            envasePesoRegisterBuilder.setData(ENVASES_PESO_ENVASE, pesoStandar.getMiEnvaseCod());
            envasePesoRegisterBuilder.setData(ENVASES_PESO_CALIBRE, pesoStandar.getMiCalibreCod());
            envasePesoRegisterBuilder.setData(ENVASES_PESO_ZONA, String.format("%1$02d", pesoStandar.getMiPosicion()));
            envasePesoRegisterBuilder.setData(ENVASES_PESO_EMBALAJE, pesoStandar.getMiEmbalajeCod());
            envasePesoRegisterBuilder.setData(ENVASES_PESO_PREFERIDO, pesoStandar.getMiMarca());
            envasePesoRegisterBuilder.setData(ENVASES_PESO_PESO_PROMEDIO, pesoStandar.getMiPeso());
            
            opDataArray dataAux = envasePesoRegisterBuilder.getDataArray();
            for (int j = 0; j < getMiEntidadFields().mSize; j++) {
               losDatosEnvasePeso[j].mDataArray[i] = dataAux.mDataArray[j];
            }
            i += 1;
        }
        return losDatosEnvasePeso;
    }
    
    @Override
    protected String[] getEntidadFieldsNames(){
        return ENVASES_PESO_COLUMNAS;
    }
    
    @Override
    protected String[] getEntidadPKFieldsNames(){
        return ENVASES_PESO_PK;
    }
}